package com.gjh.xiaokabang2code.common;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;


@Component
public class CustomMailSender {
    private static final Logger logger = LogManager.getLogger(CustomMailSender.class);

    public static String sendPostRequest(String url, Map<String, String> params) throws IOException {
        URL apiUrl = new URL(url);
        HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();

        // 设置请求方法为POST
        connection.setRequestMethod("POST");

        // 设置请求头
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Accept", "application/json, text/plain, */*");

        // 启用输出流，用于发送请求体
        connection.setDoOutput(true);

        // 将参数转换为请求体格式
        String requestBody = params.entrySet().stream()
                .map(entry -> entry.getKey() + "=" + entry.getValue())
                .collect(Collectors.joining("&"));

        // 获取输出流，并写入请求体
        try (OutputStream outputStream = connection.getOutputStream()) {
            byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);
            outputStream.write(input, 0, input.length);
        }

        // 获取响应码
        int responseCode = connection.getResponseCode();

        // 读取响应内容
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            return response.toString();
        } finally {
            // 关闭连接
            connection.disconnect();
        }
    }
//    public static void main(String[] args) {
//        try {
//            // 创建参数Map并设置参数
//            Map<String, String> params = new HashMap<>();
//            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
//            params.put("tomail", "vm2116112109@jzxy.edu.cn");
//            params.put("fromTitle", "消息&短信 MSGSMS   \n" +
//                    "消息&短信 （Message&SMS）是华为云携手全球多家优质运营商和渠道，为企业用户提供的通信服务。企业调用API或使用群发助手，即可使用验证码、通知短信服务.");
//            params.put("subject", "校卡帮平台安全验证码");
//            params.put("content", "updatedContent");
//            params.put("isTextContent", "false");
//            params.put("smtpCode", "pxftngpvoflsbfdi");
//            params.put("smtpEmail", "tsin09@qq.com");
//            params.put("smtpCodeType", "qq");
//
//            // 指定目标URL
//            String apiUrl = "https://luckycola.com.cn/tools/customMail";
//
//            // 发送POST请求并获取响应
//            String response = sendPostRequest(apiUrl, params);
//
//            // 输出响应结果
//            System.out.println("Response: " + response);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

    public static String SafetyCheckMailSend(String tomail) {

        int code= generateRandomNumber();
        //验证码内容
        String content = "您的验证码是[" + code + "],有效期是10分钟,请及时验证。如非本人，请忽略此邮件";

        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "校卡帮");
            params.put("subject", "校卡帮晋院版的验证码["+code+"]");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("校卡帮晋院版的验证码: {}", code);
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
        String verifyCode = String.valueOf(code);
        return verifyCode;
    }

    public static String SafetyCheckMailSendNext(String tomail, String verifyCode) {
        //验证码内容
        String content = "您的验证码是[" + verifyCode + "],有效期是10分钟,请及时验证。如非本人，请忽略此邮件";

        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "校卡帮");
            params.put("subject", "校卡帮晋院版的验证码["+verifyCode+"]");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("校卡帮晋院版的验证码: {}", verifyCode);
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
        return verifyCode;
    }

    /**
     * 发送找到卡邮件
     */
    @Async
    public void MailSendToLoser(String tomail, String time, String sixCode) {
        //验证码内容
        String content = "有同学在"+time+"捡到您的尾号为["+sixCode+"]的卡,请搜索“校卡帮”关注公众号后查看拾卡同学的联系方式。如果不是您的卡，这封邮件请忽略。\n如果你与捡到卡的同学取得联系，请在[我]点击关闭丢失模式。\n校卡帮注重双方个人信息的加密与隐私保护\n本邮件由系统自动发出，切勿回复";

        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "校卡帮校园卡检索提示");
            params.put("subject", "你的校园卡成功找到！");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("成功匹配到该同学的校园卡");
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 预测功能
     * @param tomail
     * @param time
     * @param sixCode
     */
    public static void PREMailSendToLoser(String tomail, String time, String sixCode) {
        //验证码内容
        String content = "校卡帮校园卡预警：疑似有同学在"+time+"捡到您的尾号为["+sixCode+"]的卡,请搜索“校卡帮”关注公众号后查看拾卡同学的联系方式。\n如果您的卡没有丢失，这封邮件请忽略。\n本邮件由系统自动发出，切勿回复";

        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "校卡帮校园卡预警提醒");
            params.put("subject", "疑似你的校园卡丢失！");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("成功匹配到该同学的校园卡");
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 注册推送功能
     * @param tomail
     */
    public static void MailSendToNewUser(String tomail) {
        //验证码内容
        String content = "同学你好，感谢注册校卡帮，校卡帮将始终免费为晋院同学提供服务！推荐提前补充校园卡信息，可开启丢卡预警功能，当有同学捡到您的卡，会自动提醒您！\n当您捡到他人的校园卡时，推荐使用校卡帮查找失主信息，匹配率高达80%\n校卡帮注重双方个人信息的加密与隐私保护\n本邮件由系统自动发出，切勿回复";

        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "欢迎使用校卡帮");
            params.put("subject", "欢迎使用校卡帮");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("成功匹配到该同学的校园卡");
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送给捡卡同学
     */
    @Async
    public void MailSendToFinder(String tomail, String time, String sixCode) {
        //验证码内容
        String content = "同学，您捡到尾号为["+sixCode+"]的校园卡在"+time+"成功匹配到失主,请搜索“校卡帮”关注公众号后查看丢卡同学的联系方式。丢卡同学有可能会联系你哦，感谢您的爱心。如果没有捡到卡，这封邮件请忽略。\n校卡帮注重双方个人信息的加密与隐私保护\n本邮件由系统自动发出，切勿回复";


        try {
            // 创建参数Map并设置参数
            Map<String, String> params = new HashMap<>();
            params.put("ColaKey", "QHltquDtxazVmd17071895250528HZ5EaENwZ");
            params.put("tomail", tomail);
            params.put("fromTitle", "校卡帮校园卡检索提示");
            params.put("subject", "校园卡的失主成功找到！");
            params.put("content", content);
            params.put("isTextContent", "false");
            params.put("smtpCode", "ZIZPNLBEHZIIODHT");
            params.put("smtpEmail", "xiaokabang@126.com");
            params.put("smtpCodeType", "126");

            // 指定目标URL
            String apiUrl = "https://luckycola.com.cn/tools/customMail";

            // 发送POST请求并获取响应
            String response = sendPostRequest(apiUrl, params);

            // 输出响应结果
            System.out.println("Response: " + response);
            // 使用 Log4j 记录随机数
            logger.info("发送的邮箱是: {}", tomail);
            logger.info("校园卡的失主成功找到");
            logger.info(response);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 随机生成6薇数字
     * @return
     */
    public static int generateRandomNumber() {
        Random random = new Random();
        // 生成范围在 100000 到 999999 之间的随机数
        return random.nextInt(900000) + 100000;
    }
}
